Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

300
Visualizações
class << self en ruby y sus métodos

Tengo un modelo en ruby on rails con el siguiente código, que usa una definición de clase singelton. Además, algo de lógica de metaprogramación. Pero, no entiendo cuándo se invocará este código. ¿Es cuando se está editando un atributo a continuación especificado?

 class Product < ApplicationRecord class << self ['cat_no', 'effort', 'impact', 'effect', 'feedback'].each do |attr| define_method "update_#{attr}" do |pr, count, user_id| pr.order=pr.cat_no pr.idea=pr.description pr.update("#{attr}"=>count,:last_modified_by=>user_id) end end end end

Por favor ayuda. Gracias

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Este código genera cinco métodos, uno para cada nombre de atributo en la lista. Todos estos métodos generados toman tres argumentos y básicamente se verán así (utilizo el nombre del atributo de impact como ejemplo):

 def self.update_impact(pr, count, user_id) pr.order = pr.cat_no pr.idea = pr.description pr.update("impact" => count, :last_modified_by => user_id) end

Eso significa que hay cinco métodos generados que actualizan el pasado en pr con algunos datos de sí mismo y con un count y un user_id de usuario.

Tenga en cuenta que este método solo trata con un pr específico, por lo tanto, es mejor usar una instancia en lugar de un método de clase como ya sugirió Stefan en su comentario. Y en mi opinión, no hay realmente un beneficio en la metaprogramación aquí. Cambiaría la lógica a

 def update_count(type, count, user_id) # or any another name that makes sense in the domain if type.in?(%i[cat_no effort impact effect feedback]) update( :order => cat_no, :idea => description, :last_modified_by => user_id, type => count ) else raise ArgumentError, "unsupported type '#type'" end end

y llamarlo en lugar de

 Model.update_impact(pr, count, user_id)

Me gusta esto

 pr.update_count(:impact, count, user_id)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda